Skip to main content

Adobe Campaign

Subsets writes experiment assignments into Adobe Campaign v8 (Managed Cloud, FDA and Enterprise/FFDA; not Campaign Standard) through Campaign's standard SOAP API. One row per person per experiment lands in a small standalone table, cus:subsetsExperimentAttributes. Your targeting workflows join on that table and keep the people whose experimentAssignment matches the value Subsets shows for a treatment. Each treatment's deliveries carry a delivery code, which links the sends in your delivery logs back to the treatment (see feedback data).

Requires Campaign v8.5 or later: Subsets authenticates with an OAuth Server-to-Server credential (Adobe).

Setup guide​

1. Adobe Developer Console​

  1. Create a project, then Add API > Adobe Campaign > OAuth Server-to-Server (Adobe).
  2. Attach the product profile of your Marketing instance. Campaign profiles are named campaign - <instance> - <operator group internal name> (Adobe); the instance's admin profile is the known-working choice.
  3. Add the I/O Management API to the same project. Its read_organizations scope is required; without it the instance rejects every call.
  4. Share the credential's Client ID and Client secret with your Subsets admin over a secure channel.

2. Adobe Campaign​

  1. Operator. Campaign creates the credential's operator on the first API call, in the operator group of the product profile (Adobe). If the operator was created by hand, give it a group under Administration > Access management > Operators.
  2. Table. Under Administration > Configuration > Data schemas, create cus:subsetsExperimentAttributes (exactly that name) from the definition below, then run Tools > Advanced > Update database structure (Adobe).
  3. IP allow list. In Control Panel, add the IP ranges Subsets provides with access type External API connection (Adobe).

3. Subsets​

Under Settings > Integrations, expand Adobe Campaign and fill in:

FieldValue
Instance URLThe URL your client console connects to, scheme and host only
IMS scopesLeave empty
Client Id, Client SecretFrom the credential

Test connection checks the credential, the allow list and read access to the table. Run test export writes one permanent test row and is the write check.

Required permissions​

WherePermission
Developer Console projectAdobe Campaign API and I/O Management API
Campaign operatorRead, insert and update on cus:subsetsExperimentAttributes; read on nms:delivery
Control PanelSubsets' IP ranges allow-listed for External API connection

The table​

Enterprise (FFDA) definition
<srcSchema namespace="cus" name="subsetsExperimentAttributes" label="Subsets experiment attributes">
<element name="subsetsExperimentAttributes" label="Subsets experiment attributes"
autopk="true" autouuid="true" dataSource="nms:extAccount:ffda">
<key name="customerIdExperimentId">
<keyfield xpath="@customerId"/>
<keyfield xpath="@experimentId"/>
</key>
<attribute name="customerId" type="string" length="128" label="Customer id"
desc="The CRM customer id - must match the id exported in delivery logs"/>
<attribute name="experimentId" type="string" length="128" label="Experiment id"/>
<attribute name="experimentAddedAt" type="datetime" label="Experiment added at"/>
<attribute name="experimentName" type="string" length="255" label="Experiment name"/>
<attribute name="subscriberChurnRisk" type="double" label="Subscriber churn risk"/>
<attribute name="experimentAssignment" type="string" length="128" label="Experiment assignment"/>
</element>
</srcSchema>
FDA definition
<srcSchema namespace="cus" name="subsetsExperimentAttributes" label="Subsets experiment attributes">
<element name="subsetsExperimentAttributes" label="Subsets experiment attributes" autopk="true">
<key name="customerIdExperimentId">
<keyfield xpath="@customerId"/>
<keyfield xpath="@experimentId"/>
</key>
<attribute name="customerId" type="string" length="128" label="Customer id"
desc="The CRM customer id - must match the id exported in delivery logs"/>
<attribute name="experimentId" type="string" length="128" label="Experiment id"/>
<attribute name="experimentAddedAt" type="datetime" label="Experiment added at"/>
<attribute name="experimentName" type="string" length="255" label="Experiment name"/>
<attribute name="subscriberChurnRisk" type="double" label="Subscriber churn risk"/>
<attribute name="experimentAssignment" type="string" length="128" label="Experiment assignment"/>
</element>
</srcSchema>
ColumnMeaning
customerIdThe person's customer ID. It must be the same ID, in the same format, in the profile feed you send Subsets, in this table and in your delivery logs
experimentIdThe experiment's external ID
experimentAddedAtWhen the person was added to the experiment, UTC
experimentNameThe experiment name in Subsets
subscriberChurnRisk30-day churn probability as a percentage, 0-100; omitted when the subscription has no score
experimentAssignment<experiment external id>-variant-<N>. Filter your targeting on this value

Rows are inserted or updated by customerId + experimentId after each data import, normally daily. Control participants are never written.

Delivery codes​

  • Use one code per experiment treatment and stamp it on every delivery of that treatment, including recurring delivery templates.
  • Codes are matched exactly, case included. Enter each code in Subsets exactly as stamped.
  • Never reuse a code across experiments or treatments, and avoid dates in codes.

Subsets checks each code against your instance when you register it on the experiment.